home *** CD-ROM | disk | FTP | other *** search
- {
- LOU DUCHEZ
-
- ATTENTION, whoever was trying to calculate PI! Here's a swell program,
- as a follow-up to a recent post of mine about approximating techniques!
-
- }
-
- program calcpi; { Calculates pi by getting the area of one-quarter of a
- circle of radius 1, and then multiplying by 4. The area
- is an approximation, derived by Simpson's method: see
- previous post for explanation of that technique. }
-
- uses
- crt;
-
- const
- lowerbound = 0; { The interval we're evaluating is from 0 to 1. }
- higherbound = 1; { I put the 0 and 1 here for clarity. }
-
- var
- incs : word;
- quartpi,
- h, x : real;
-
- function y(x : real) : real; { Feed it an x-value, and it tells you the }
- begin { corresponding y-value on the unit circle. }
- y := sqrt(1 - x * x); { A no-brainer. }
- end;
-
- begin
- { I leave you to do the error-checking on input. }
- clrscr;
- write('Enter a WORD (1 - 32767) for the number of parabolas to do: ');
- readln(incs);
-
- { The answer for a quarter of pi will be accumulated into QuartPi. }
- quartpi := 0;
-
- { H is the interval to increment on. X is the "middle" x value for each
- parabola in Simpson's method. Here it is set equal to one interval
- above the lower bound: Simpson's method looks at points on either side
- of "X", so my reasoning is obvious. Note also that, by magical
- coincidence, the last evaluation will have "X" equal to the higher
- bound of the interval minus H. }
-
- h := (higherbound - lowerbound) / (1 + 2 * incs);
- x := lowerbound + h;
-
- { This loop accumulates a value for pi/4. }
- while incs > 0 do
- begin
- if x < 0 then
- x := 0;
- quartpi := quartpi + y(x - h) + 4 * y(x) + y(x + h);
-
- { Move X two increments to the right, and decrease the number of parabolas
- we still have to do. }
- x := x + 2 * h;
- dec(incs);
- end;
-
- { Simpson's method has you multiply the sum by H/3. }
- quartpi := h * quartpi / 3;
-
- { Print answer. }
- writeln(4 * quartpi : 12 : 8);
- writeln('This has been a display of Simpson''s method. D''ohh!');
- end.